package cn.xyy.jdbc.support;

import java.util.List;

/**
 * sql操作接口，传入要执行的SQL和要绑定到SQL的参数，操纵数据库，执行增、删、改、查操作
 * 
 * <P>
 * 通过对springjdbc原生提供的接口进行封装，进一步简化对数据库的操纵
 * </P>
 * 
 * @author xyy
 *
 */
public interface ISqlOperation {

	/**
	 * 使用提供的SQL语句和提供的参数，执行增删改
	 * 
	 * @param sql    要执行的SQL
	 * @param params 要绑定到SQL的参数
	 * @return int 受影响的行数
	 *
	 */
	int insertOrUpdateOrDelete(String sql, Object[] params);

	/**
	 * 查询给定的SQL，返回实例列表
	 *
	 * @param sql    要执行的SQL查询
	 * @param classz 实体类
	 * @return List<T> 实例列表
	 *
	 */

	<T> List<T> select(String sql, Class<T> classz);

	/**
	 * 查询给定的SQL和参数列表，返回实例列表
	 *
	 * @param sql    要执行的SQL查询
	 * @param params 要绑定到查询的参数
	 * @param classz 实体类
	 * @return List<T> 实例列表
	 *
	 */
	<T> List<T> select(String sql, Object[] params, Class<T> classz);

	/**
	 * 
	 * 查询给定的SQL，返回一个实例
	 * 
	 * @param sql    要执行的SQL查询
	 * @param classz 实体类
	 * @return T 实例
	 *
	 */
	<T> T selectOne(String sql, Class<T> classz);

	/**
	 * 查询给定的SQL和参数列表，返回一实例
	 *
	 * @param sql    要执行的SQL查询
	 * @param params 要绑定到查询的参数
	 * @param classz 实体类
	 * @return T 实例
	 *
	 */
	<T> T selectOne(String sql, Object[] params, Class<T> classz);
}
